package com.huluspace.nosqlredis.model;

import com.huluspace.nosqlredis.model.Role;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.Set;

@Data
@AllArgsConstructor // 生成全参构造器（业务代码可用）
@NoArgsConstructor // 生成无参构造器（给Jackson、Hibernate、JDBC用）
@Entity             // JPA实体类
@Table(name = "users") // 映射的数据库表名
public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY) // 主键自增
  private Long id;
  @Column(nullable = false, unique = true) // 非空且唯一
  private String username; // 用户名
  @Column(nullable = false)
  private String password; // 密码
  @Column(nullable = false)
  private boolean enabled; // 状态

  @ManyToMany(fetch = FetchType.LAZY)
  @JoinTable(
      name = "user_roles", // 中间表
      joinColumns = @JoinColumn(name = "user_id"), // 当前实体（User）在中间表的外键
      inverseJoinColumns = @JoinColumn(name = "role_id") // 关联实体（Role）在中间表的外键
  )
  private Set<Role> roles = new HashSet<>();

}

